/**
 * 正常情况下，同一时刻，所有的时区的时间戳都是相等的，但是js的Date只能依据
 * 当前系统的时区来创建时间，所以就只能通过调整时间戳的值，来达到效果.
 * 这个方法，其实是应了js的自身约束，“曲线救国”的方式来达到时间的按时区展现。
 * @param timestamp 时间戳 （单位秒）
 * @param targetTimeZone 要展示的目标时区的时间 （-1，-4，3，8等）
 * @return 返回目标时区的时间
 */
export function formateDate (timestamp, fmt, targetTimeZone) {
  if(timestamp == null) return null
  if(targetTimeZone == null) targetTimeZone = 0 - (new Date().getTimezoneOffset() / 60)
  if(fmt == null) fmt = 'yyyy-MM-dd hh:mm:ss'
  var date = toTimeZoneTime(timestamp, targetTimeZone)
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  let o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (let k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      let str = o[k] + ''
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str))
    }
  }
  return fmt
}

/**
 * 正常情况下，同一时刻，所有的时区的时间戳都是相等的，但是js的Date只能依据
 * 当前系统的时区来创建时间，所以就只能通过调整时间戳的值，来达到效果。
 * 这个方法，其实是应了js的自身约束，“曲线救国”的方式来达到时间的按时区展现。
 * @param timestamp 时间戳 （单位秒）
 * * @param targetTimeZone 要展示的目标时区的时间 （-1，-4，3，8等）
 * @return 返回目标时区的时间
 */
export function toTimeZoneTime (timestamp, targetTimeZone) {
  // 一小时的毫秒数
  var oneHourMilli = 60 * 60 * 1000
  var date = new Date()
  // offset 单位为分钟，可正可负（取决当前系统时区）
  var offset = date.getTimezoneOffset()
  // 把时间戳调到0时区
  // （这个说法其实不正确，因为同一个时刻，每隔时区的时间戳应该是一样的）
  //  但因为js的new Date()创建时直接按照本地系统的时区去转换时间，
  // 所以为了能够现实目标时区的时间，只能通过调整时间戳（这个和上面java的部分是不一样的）。
  var utcTimestamp = timestamp * 1000 + offset * 60 * 1000
  // 将0时区调整到目标时区
  date.setTime(utcTimestamp + targetTimeZone * oneHourMilli)
  return date
}

// eslint-disable-next-line no-unused-vars
function padLeftZero (str) {
  return ('00' + str).substr(str.length)
}

// export function formatDate (cellValue) {
//   // eslint-disable-next-line eqeqeq
//   if (cellValue == null || cellValue == '') return ''
//   let date = new Date(parseInt(cellValue) * 1000) // 时间戳为10位需*1000，如果为13位的话不需乘1000。
//   let Y = date.getFullYear() + '-'
//   let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) + '-' : date.getMonth() + 1 + '-'
//   let D = date.getDate() < 10 ? '0' + date.getDate() + ' ' : date.getDate() + ' '
//   let h = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':'
//   let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':'
//   let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
//   return Y + M + D + h + m + s
// }

